elastic search使用总结

您所在的位置:网站首页 elastic search文档 elastic search使用总结

elastic search使用总结

2023-03-23 14:49| 来源: 网络整理| 查看: 265

1. elasticsearch安装

官方下载地址:https://www.elastic.co/downloads/elasticsearch

解压文件 elasticsearch-2.4.0.zip

修改配置文件

elasticsearch-2.4.0 cat config/elasticsearch.yml |grep -v "#" cluster.name: rainbow network.host: 127.0.0.1 http.port: 9200

配置说明

cluster.name表示es集群的名称,可以自定义一个自己需要的集群名称http.port 表示对外提供http服务时的http端口。network.host 表示本地监听绑定的ip地址,此处为测试环境,直接使用本机的ip地址 127.0.0.1.

启动说明

elasticsearch-2.4.0 nohup ./bin/elasticsearch &

启动后显示信息

es启动监听两个端口,9300和92009300端口是使用tcp客户端连接使用的端口;9200端口是通过http协议连接es使用的端口;

2. 使用http方式增加和查询数据

增加数据(http PUT):

➜ curl -XPUT localhost:9200/user_idx/type_tags/12 -d\ '{"name" : "Mr.YF", "tags" : ["Go","Java","Lua","C++","Tcl","..."]}' {"_index":"user_idx","_type":"type_tags","_id":"12","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}

查询数据(http GET)

3. 使用elasticsearch客户端编写java代码访问es

编写es客户端提供者类,对es连接做简单的封装

SearchClientProvider.java

package org.wyf.elasticsearch.search; /** * Created by wyf on 16/9/25. */ import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.wyf.common.property.XmlProperties; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import static java.lang.System.out; public class SearchClientProvider { private static final Logger LOGGER = LoggerFactory.getLogger(SearchClientProvider.class); private TransportClient client = null; private volatile boolean inited = false; public TransportClient get() { return this.client; } @PreDestroy public synchronized void close() { if (this.client != null) { this.client.close(); } } @PostConstruct public synchronized void init() { if (!inited) { try { Map config = XmlProperties.loadFromXml("properties/elasticsearch.xml"); if (config == null) { out.println("load xml err"); return; } Iterator iterator = config.entrySet().iterator(); Map settingConfig = new HashMap(); while (iterator.hasNext()) { Map.Entry next = iterator.next(); if (!next.getKey().equals("transport.addresses")) { settingConfig.put(next.getKey(), next.getValue()); } } Settings settings = Settings.builder().put(settingConfig).build(); TransportClient client = TransportClient.builder().settings(settings).build(); this.client = client; String[] addresses = config.get("transport.addresses").split(","); for (String address : addresses) { String[] hostAndPort = address.split(":"); client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(hostAndPort[0]), Integer.valueOf(hostAndPort[1]))); } this.inited = true; } catch (UnknownHostException e) { LOGGER.error(String.format("init search client err:=>msg:[%s]", e.getMessage()), e); if (client != null) { this.client.close(); } } } } }

编写elasticsearch的配置文件加载类

XmlProperties.java

package org.wyf.common.property; import org.slf4j.LoggerFactory; import org.slf4j.Logger; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.*; public class XmlProperties { private static final Logger LOGGER = LoggerFactory.getLogger(XmlProperties.class); private XmlProperties() { } public static Map loadFromXml(String xmlPropertiesPath) { try { Object in = XmlProperties.class.getClassLoader().getResourceAsStream(xmlPropertiesPath); if(in != null) { LOGGER.info("Found the xml properties [{}] in class path,use it", xmlPropertiesPath); Map e1 = loadFromXml((InputStream)in); return e1; } Map resMap = null; File e = new File(xmlPropertiesPath); if(!e.isFile()) { return resMap; } LOGGER.info("Found the xml properties [{}] in file path,use it", xmlPropertiesPath); in = new FileInputStream(new File(xmlPropertiesPath)); resMap = loadFromXml((InputStream)in); ((InputStream) in).close(); return resMap; } catch (Exception var7) { LOGGER.error("Load xml properties [" + xmlPropertiesPath + "] error.", var7); } return null; } public static Map loadFromXml(InputStream in) throws IOException { Properties properties = new Properties(); properties.loadFromXML(in); HashMap map = new HashMap(); Set entries = properties.entrySet(); Iterator iter = entries.iterator(); while(iter.hasNext()) { Map.Entry entry = (Map.Entry)iter.next(); map.put((String)entry.getKey(), (String)entry.getValue()); } return map; } }

编写elasticsearch简单的操作类,包含成员函数 save update get 和delete

SearchImpl.java

package org.wyf.elasticsearch; /** * Created by wyf on 16/9/25. */ import org.elasticsearch.action.delete.DeleteRequestBuilder; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.get.GetRequestBuilder; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.index.engine.VersionConflictEngineException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.wyf.elasticsearch.search.SearchClientProvider; import javax.annotation.PostConstruct; import java.util.Map; public class SearchImpl implements ISearch { private static final Logger LOGGER = LoggerFactory.getLogger(SearchImpl.class); private SearchClientProvider searchClientProvider; public SearchImpl() { searchClientProvider = new SearchClientProvider(); searchClientProvider.init(); } public Map save(String index, String type, String id, Map data) { TransportClient client = searchClientProvider.get(); IndexRequestBuilder builder = client.prepareIndex(index, type, id); IndexResponse response = builder .setSource(data) .execute() .actionGet(); LOGGER.info("save index:=>index:{}, type:{}, id:{}, data:{}, rsp:{}", index, type, id, data, response); return data; } public int update(String index, String type, String id, Map data) { int i = 2; do { try { if (_innerUpdate(index, type, id, data)) return 1; } catch (VersionConflictEngineException e) { LOGGER.warn(String.format("update index:=>index:%s, type:%s, id:%s, data:%s, rsp:%s", index, type, id, data, e.getMessage()), e); } } while ((i--) > 0); return _innerUpdate(index, type, id, data) ? 1 : 0; } public int delete(String index, String type, String id) { TransportClient client = searchClientProvider.get(); DeleteRequestBuilder builder = client.prepareDelete(index, type, id); DeleteResponse response = builder.execute().actionGet(); LOGGER.info("delete index:=>index:{}, type:{}, id:{}, rsp:{}", index, type, id, response); return response.isFound() ? 1 : 0; } public Map get(String index, String type, String id) { TransportClient client = searchClientProvider.get(); GetRequestBuilder builder = client.prepareGet(index, type, id); GetResponse response = builder.execute().actionGet(); return response.isExists() ? response.getSource() : null; } private boolean _innerUpdate(String index, String type, String id, Map data) { TransportClient client = searchClientProvider.get(); GetRequestBuilder getRequestBuilder = client.prepareGet(index, type, id); GetResponse getResponse = getRequestBuilder.execute().actionGet(); if (getResponse.isExists()) { final long version = getResponse.getVersion(); final Map source = getResponse.getSource(); source.putAll(data); IndexRequestBuilder builder = client.prepareIndex(index, type, id); IndexResponse response = builder .setVersion(version) .setSource(source) .execute() .actionGet(); LOGGER.info("update index:=>index:{}, type:{}, id:{}, data:{}, rsp:{}", index, type, id, data, response); return true; } throw new RuntimeException(String.format("can not get document:=>index:%s, type:%s, id:%s ", index, type, id)); } }

编写单元测试类

ElasticSearchTest.java

package org.wyf; import org.junit.Before; import org.junit.Test; import org.wyf.elasticsearch.ISearch; import org.wyf.elasticsearch.SearchImpl; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * Created by wyf on 16/9/25. */ public class ElasticsearchTest { ISearch search; @Test public void get() { Map map = search.get("a", "type1", "123"); Set set = map.keySet(); for (Iterator it = set.iterator(); it.hasNext();) { String key = it.next(); System.out.println(key + ":" + map.get(key)); } } @Test public void save() { Map values = new HashMap(); values.put("k1", "v1"); values.put("k2", "v2"); Map map = search.save("a", "type1", "123", values); Set set = map.keySet(); for (Iterator it = set.iterator(); it.hasNext();) { String key = it.next(); System.out.println(key + ":" + map.get(key)); } } @Before public void before() { search = new SearchImpl(); } }

elasticsearch的配置文件

elasticsearch的配置 true rainbow 127.0.0.1:9300

测试结果:

测试save函数结果

http接口查询结果页面

遇到的问题

最开始调试时返回如下错误

NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{127.0.0.1}{127.0.0.1:9200}] ] at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:290) at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:207) at org.elasticsearch.client.transport.support.TransportProxyClient.execute(TransportProxyClient.java:55) at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:283) at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:347) at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:85) at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:59) at org.wyf.elasticsearch.SearchImpl.save(SearchImpl.java:36) at org.wyf.ElasticsearchTest.save(ElasticsearchTest.java:35) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) at org.junit.runners.ParentRunner.run(ParentRunner.java:309) at org.junit.runner.JUnitCore.run(JUnitCore.java:160) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:253) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

解决办法是检查es集群的名称和端口是否正确

由于端口配置错误,导致如上问题

正确的端口是9300,正如最开始说的那样,使用tcp方式访问es时,使用端口9300,使用http方式访问es使用端口9200.

代码git地址:

https://github.com/gityf/java_demo/tree/master/demo/src/main/java/org/wyf/elasticsearch

Done.

elastic search使用总结的更多相关文章 elastic search查询命令集合

Technorati 标签: elastic search,query,commands 基本查询:最简单的查询方式 query:{"term":{"title ...

elastic search 学习笔记

Elastic search在数据分析的应用中相当于一个数据库的搜索引擎. 跟MySQL类似,它有自己的查询语言,只不过不是关系型数据库,属于NoSQL. 可以根据索引从分布式服务器文件系统中快速存取 ...

elastic search 学习 一

初步阅读了elastic search 的文档,并使用command实践操作. 大概明白其概念模型.

分库分表后跨分片查询与Elastic Search

携程酒店订单Elastic Search实战:http://www.lvesu.com/blog/main/cms-610.html 为什么分库分表后不建议跨分片查询:https://www.jian ...

自学elastic search

工作也有一段时间了,虽然来这个公司之后学会了几门不同的语言,但想拨尖还是任重道远. 想往高级程序员甚至是架构师方向发展.他仍然是我的学习对象.我现在做着的,无非是他玩剩下的罢了. luncene之前有 ...

Elastic Search 上市了,市值翻倍,这群人财务自由了!

国庆长假,大部分人还深浸在风花雪月之中,而就在昨天(美国时间10月5号),我们 Java 程序员所熟知的大名鼎鼎的 Elastic Search 居然在美国纽约证券交易所上市了! 当说到搜索时,大部分 ...

Elastic Search 安装和配置

目标 部署一个单节点的ElasticSearch集群 依赖 java环境 $java -version java version "1.8.0_161" Java(TM) SE R ...

[elastic search][redis] 初试 ElasticSearch / redis

现有项目组,工作需要. http://www.cnblogs.com/xing901022/p/4704319.html Elastic Search权威指南(中文版) https://es.xiao ...

elastic search文档详解

在elastic search中文档(document)类似于关系型数据库里的记录(record),类型(type)类似于表(table),索引(index)类似于库(database). 文档一定有 ...

elastic search 查询

eelastic search主要有两种查询方式,一种是查询字符串,一种是请求体(json格式)查询. 查询字符串: 查询字符串的功能相对简单,使用容易. 比如GET http://localhost ...

随机推荐 使用串口线真机调试Linux内核

一.环境 ubuntu 14.04 一台有串口的PC(编号PC1,被调试机器) 另一台PC通过USB转串口线连接PC1(编号PC2,发起调试命令的机器) 二.串口线配置及测试 安装cutecom US ...

python_接口开发

一.GET和POST请求from flask import Flask,jsonifydata = { 'name':'Jerry', 'sex':'男', 'age':'18'}app = Flas ...

Django rest_framework 实用技巧

前言: 最近工作中需要用到Django rest_framework框架做API, 边学边写,记录了一些实际工作中需要用到的功能,不是很全也不系统,以后需要什么功能可以在这查询. 后续还会更新其它的用 ...

python 补漏计划

从今天开始把python的细枝末节都梳理下 争取 每星期 两篇博文

Masonry tableviewCell布局(转)

转载自:http://www.henishuo.com/masonry-tableviewcell-layout/ 前言 说到iOS自动布局,有很多的解决办法.有的人使用xib/storyboard自 ...

KMP算法实现

链接:http://blog.csdn.net/joylnwang/article/details/6778316 KMP算法是一种很经典的字符串匹配算法,链接中的讲解已经是很明确得了,自己按照其讲解 ...

sql server 读取excel里的数据

以下是执行的sql代码,只拿简单读取数据举例,其他详细的,请自行查看 reconfigure RECONFIGURE GO GO SELECT * FROM OPENROWSET('Microsoft ...

Xamarin.ios 调用接口

NSString urlstring = new NSString("http://211.155.229.230:8585/api/users/postregister");  ...

Theano Graph Structure

Graph Structure Graph Definition theano's symbolic mathematical computation, which is composed of: A ...

http请求与响应(content-type)

http请求信息由浏览器把地址栏URL信息和页面(html.jsp.asp)组装成http请求消息体(如下). (请求消息行)(请 ...



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3